package bao;

import DBCon.DBCon;
import model.Book;
import model.Cart;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

// 创建Cart 购物车 数据访问层类
public class CartDao {
//       创建数据库工共类连接对象
         DBCon dbcon = new DBCon();
//         创建数据库连接对象
        Connection con = null;
//        创建sql处理对象
        PreparedStatement pstm = null ;
//         创建sql查询结果集对象
        ResultSet rs = null;
//         创建cart的list集合对象 用于存储数据库里面数据
        List<Cart> carts = new ArrayList<>();
//        创建cart 对象
        Cart cart;
//        创建Update的flag对象
            int flag;


//         创建查询购物车总表全部信息的方法
    public List<Cart> QueryAllCart(){

//        创建sql查全部数据的语句
        String sql = "select * from cart";
        try{
            //创建数据库连接
            con = dbcon.dbCon();
//         预处理sql语句
            pstm = con.prepareStatement(sql);
//            执行sql语句，并将结果集返回给rs对象
            rs = pstm.executeQuery();
//            while循环遍历结果集 取出里面的全部数据
            while(rs.next()){
                String Num = rs.getString("bk_cartNum");
                String cartNum = rs.getString("bk_cartNum_selected");
                String price = rs.getString("c_price_selected");
                String name = rs.getString("bk_name");
                cart = new Cart(Num,cartNum,price,name);
                carts.add(cart);
            }
//            System.out.println(carts);
            return carts;
        }catch(Exception e){
            e.printStackTrace();
        } finally {
            dbcon.close();
        }
        return null;
    }
//    创建根据图书名称查询购物车的方法
    public List<Cart>  QueryCartByName(String bk_name){
//        创建数据库连接
        con = dbcon.dbCon();
//        定义sql连接
        try{
        String sql = "select * from cart where bk_name=?";
//        预处理sql语句
        pstm = con.prepareStatement(sql);
//        赋值
        pstm.setString(1,bk_name);
//        执行sql语句
            rs = pstm.executeQuery();
//            判断 有--存入对象  没有 返回空
            while(rs.next()){
                String Num = rs.getString("bk_cartNum");
                String cartNum = rs.getString("bk_cartNum_selected");
                String price = rs.getString("c_price_selected");
                String name = rs.getString("bk_name");
                cart = new Cart(Num,cartNum,price,name);
                carts.add(cart);
            }
            return carts;
        } catch(Exception e){
            e.printStackTrace();
        }
        return null;
    }
//    创建修改购物车信息的方法
    public boolean UpdateCartByName(Cart cart, String bk_name) {
        // 调用公共类 创建数据库连接 返回 con 对象
        con = dbcon.dbCon();
        // 定义修改的数据库Sql语句
        String sql = "update cart set bk_cartNum=?,bk_cartNum_selected=?,c_price_selected=? where bk_name=?";
        try{
            // 创建PreparedStatement对象 并预处理sql语句
            pstm = con.prepareStatement(sql);
            // 将修改的值放入sql
            pstm.setString(1,cart.getBk_cartNum());
            pstm.setString(2,cart.getBk_cartNum_selected());
            pstm.setString(3,cart.getC_price_selected());
            pstm.setString(4,bk_name);

            // 执行sql 判断 如果为真则返回 true
            int flag = pstm.executeUpdate();
            if(flag>0){
                return true;
            }
        } catch(Exception e){
            e.printStackTrace();
        }
        return false;
    }

//      添加购物车信息
    public boolean AddCart(Cart cart, String cartName){
        con = dbcon.dbCon();
        String addSql = "insert into customer (bk_name,,bk_cartNum_selected,c_price_selected) values(?,?,?)";
        String updateSql = "update cart set bk_cartNum=? where bk_name=?";
        try{
            System.out.println(QueryCartByName(cartName));
            if(QueryCartByName(cartName) == null){
                System.out.println("2:"+cartName);
                pstm = con.prepareStatement(addSql);
                pstm.setString(1,cart.getBk_name());
                pstm.setString(2,cart.getBk_cartNum_selected());
                pstm.setString(3,cart.getC_price_selected());
                flag =  pstm.executeUpdate();
                if(flag>0){
                    return true;
                }
            }else {
                System.out.println("3:"+cartName);
                pstm = con.prepareStatement(updateSql);
                // 将修改的值放入sql
                int num = Integer.parseInt(cart.getBk_cartNum()) + 1;
                pstm.setString(1, String.valueOf(num));
                pstm.setString(2, cartName);
                // 执行sql 判断 如果为真则返回 true
                int flag = pstm.executeUpdate();
                if(flag>0){
                    return true;
                }
            }
        } catch(Exception e){
            e.printStackTrace();
        }
        return false;
    }

}
